package chapters15_bingfa.chapters15_3;

/**
 * Created by xinxuchu on 2020/1/28.
 */
public class AllTest {

    public static void main(String[] args) throws InterruptedException{
        //*****************************生产者/消费者模式**********************************8
//        MyBlockingQueue<String> queue =  new MyBlockingQueue<>(10);
//        new Producer(queue).start();
//        new Consumer(queue).start();

        //****************************多线程同时开始*******************************************
//        int num = 10;
//        FireFlag fireFlag = new FireFlag();
//        Thread[] threads = new Thread[num];
//
//        for (int i = 0; i < num; i++) {
//            threads[i] = new Racer(fireFlag);
//            threads[i].start();
//        }
//        Thread.sleep(1000);
//        fireFlag.fire();
        //***************************等待结束***********************************************
        //使用join有时比较麻烦，需要主线程逐一等待每个子线程。这里，我们演示一种新的写法。
        // 主线程与各个子线程协作的共享变量是一个数，这个数表示未完成的线程个数，初始值为子线程个数，主线程等待该值变为0，
        // 而每个子线程结束后都将该值减一，当减为0时调用notifyAll
        int workNum = 1000;
        MyLanch lanch = new MyLanch(workNum);
        Worker[] workers = new Worker[workNum];
        for (int i = 0; i < workNum ; i++) {
            workers[i] = new Worker(lanch);
            workers[i].start();
        }
        lanch.await();
        System.out.println("collec workers results");

    }
}
